"""
数据集API：此文件用于提供后端服务，即获取数据集目录和详情
"""

import logging
from fastapi import APIRouter, HTTPException
from typing import List
from pydantic import BaseModel
from utils.image_reader import get_datasets_list, get_dataset_info

# 创建日志记录器
logger = logging.getLogger(__name__)

# 创建API路由路由器
router = APIRouter(prefix="/api/datasets", tags=["datasets"])


# 定义数据集模型
class Dataset(BaseModel):
    # id: str
    name: str   # 从实现逻辑上看一样
    image_count: int                # 2d图像数量
    medical_image_count: int        # 3d医学图像数量
    path: str
    type: str  # "2d" 或 "3d"


# 定义数据集详情模型
class DatasetDetail(Dataset):
    # 它继承自 Dataset 模型，相当于在其基础上丰富了键
    images: List[dict]


# 获取数据集列表
@router.get("/", response_model=List[Dataset])
def get_datasets():
    """
    获取所有数据集列表
    """
    logger.info("请求获取数据集列表")
    try:
        datasets = get_datasets_list()
        logger.info(f"成功获取数据集列表，共找到 {len(datasets)} 个数据集")
        return datasets
    except Exception as e:
        logger.error(f"获取数据集列表时发生错误: {str(e)}")
        raise HTTPException(status_code=500, detail="内部服务器错误")


# 获取特定数据集详情
@router.get("/{dataset_id}", response_model=DatasetDetail)
def get_dataset(dataset_id: str):
    """
    根据ID获取特定数据集的详细信息
    
    Args:
        dataset_id: 数据集ID
        
    Returns:
        数据集详细信息
        
    Raises:
        HTTPException: 当数据集不存在时抛出404错误
    """
    logger.info(f"请求获取数据集详情，数据集ID: {dataset_id}")
    try:
        dataset_info = get_dataset_info(dataset_id)
        
        if dataset_info is None:
            logger.warning(f"未找到数据集，数据集ID: {dataset_id}")
            raise HTTPException(status_code=404, detail="数据集未找到")
        
        logger.info(f"成功获取数据集详情，数据集ID: {dataset_id}")
        return dataset_info
    except HTTPException:
        # 重新抛出HTTP异常
        raise
    except Exception as e:
        logger.error(f"获取数据集详情时发生错误，数据集ID: {dataset_id}, 错误: {str(e)}")
        raise HTTPException(status_code=500, detail="内部服务器错误")
